// main主函数，调用其他函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "restaurant.h"
#include "dish.h"
#include "window.h"
#include "order.h"

// 清除输入缓冲区残留的换行符
void clear_buf() {
    while (getchar() != '\n');
}

// 处理输入错误，确保输入有效
int read_int(const char *prompt) {
    int num;
    printf("%s", prompt);
    while (scanf("%d", &num) != 1) {
        clear_buf();
        printf("输入错误！请输入整数：");
    }
    clear_buf(); // 清除输入后的换行符
    return num;
}

// 窗口操作子界面（二级菜单）
// 进入指定窗口的操作界面
void window_operate_ui(Window *pWin, Restaurant *pR) {
    if (pWin == NULL) return;
    int choice;

    do {
        // 窗口操作菜单
        printf("\n================ 【%s（窗口%d）操作】 =================\n",
               pWin->window_name, pWin->window_id);
        printf("1. 添加菜品          2. 删除菜品          3. 修改菜品\n");
        printf("4. 查找菜品          5. 查看窗口订单      6. 新增订单\n");
        printf("7. 删除订单          8. 修改订单          9. 库存预警\n");
        printf("0. 返回上一级\n");
        choice = read_int("请选择操作（0-9）：");
        printf("\n");

        switch (choice) {
            case 1:
                Dish_add(pWin);
                break;
            case 2:
                Dish_delete(pWin);
                break;
            case 3:
                Dish_update(pWin);
                break;
            case 4:
                Dish_find(pWin);
                break;
            case 5: { // 查看当前窗口订单
				window_order_print(pWin);
                float revenue = Window_calc_revenue(pWin);
                printf("当前窗口营业额：%.2f元\n", revenue);
                break;
            }
            case 6:
                Window_Order_add(pWin); // 新增订单（直接操作当前窗口）
                break;
            case 7: {
				window_delete_add(pWin);
                break;
            }
            case 8: { 
				Window_update_add(pWin);
                break;
            }
            case 9:{
                int threshold = read_int("请输入库存预警阈值：");
                Window_stock_warning(pWin, threshold);
                break;
			}
			case 0: 
                printf("返回餐馆主界面...\n");
                break;
            default:
                printf("无效选择！请重新输入\n");
        }
    } while (choice != 0);
}

// 餐馆主操作界面（一级菜单）
void restaurant_main_ui(Restaurant *pR) {
    if (pR == NULL) return;
    int choice;
    Restaurant_init(pR); // 初始化餐馆

    do {
        // 餐馆主菜单
        printf("\n=================== 【%s管理系统】 ===================\n",
               pR->restaurant_name);
        printf("1. 修改餐馆名称      2. 查看餐馆概览      3. 添加窗口\n");
        printf("4. 删除窗口          5. 批量设置窗口状态  6. 统计总菜品数\n");
        printf("7. 修改窗口信息      8. 管理窗口          9. 打印所有窗口\n");
        printf("10.查找窗口         11. 修改单个窗口状态  0.退出系统\n");
        choice = read_int("请选择操作（0-11）：");
        printf("\n");

        switch (choice) {
            case 1: { // 修改餐馆名称
                char new_name[50];
                printf("请输入新的餐馆名称：");
                fgets(new_name, 50, stdin);
                new_name[strcspn(new_name, "\n")] = '\0'; // 去除fgets的换行符
                Restaurant_set_name(pR, new_name);
                printf("餐馆名称已修改为：%s\n", pR->restaurant_name);
                break;
            }
            case 2:
                // 显示餐馆基本信息
                Restaurant_show_overview(pR);
                float revenue = Restaurant_Window_calc_revenue(pR);
                printf("当前餐馆的营业额为：%.2f元\n", revenue);
                break;
			case 3:
				Window_add(pR);
				break;
            case 4: 
				Window_delete(pR);
				break;
            case 5: { // 批量设置窗口状态
                Restaurant_batch_set_window_status(pR);
				break;
            }
            case 6: { // 统计总菜品数
                int total = Restaurant_calc_total_dishes(pR);
                printf("餐馆当前总菜品数：%d道\n", total);
                break;
            }
            case 7:
				Window_update(pR);
				break;
			case 8:
                printf_all_window_info(pR);
				if (pR->window_count == 0) {
					break;
				}
		 		// 让用户选择要操作的窗口
                int target_id;
				while (1){
					printf("\n您请输入要操作的窗口编号:");
					scanf("%d",&target_id);
					if (target_id < 1 || target_id > pR->window_count){
						printf("输入无效，请重新输入！\n");
						while (getchar() != '\n');
					} else if (0 == pR->windows[target_id-1].window_state){
						printf("该窗口已打烊");
						break;
					} else{
						Window * target_win = &pR->windows[target_id-1];
						window_operate_ui(target_win, pR); // 进入窗口子界面
						break;
					}
				}
				break;
			case 9:
				printf_all_window_info(pR);//打印所有窗口
				break;
			case 10:
				Window_find(pR);//查找窗口
				break;
			case 11:
				Window_set_open(pR);//修改单个窗口状态
				break;
			case 0: 
				Restaurant_sava(pR);
                printf("退出系统成功！\n");
                break;
            default:
                printf("无效选择！请重新输入\n");
        }
    } while (choice != 0);
}

// 主函数
int main() {
    Restaurant my_restaurant;
    restaurant_main_ui(&my_restaurant); // 启动餐馆管理界面
    return 0;
}
